/**
 *
 * @author Pascal && Yves && Gratien
 */
package edu.com.gestionstock.dao.bo;

import edu.com.gestionstock.bean.Livres;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;



import edu.com.gestionstock.bean.Utilisateur;
import edu.com.gestionstock.dao.DAO;

public class UtilisateursDAO extends DAO<Utilisateur>
{

    @Override
    public Utilisateur find(int id)
    {
        Utilisateur utilisateur = new Utilisateur();
        try
        {
            ResultSet result = this.connect
                    .createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE).executeQuery(
                    "SELECT * FROM utilisateur WHERE id = " + id);
            if ( result.first() )
            {
                utilisateur.setId(id);
                utilisateur.setNom(result.getString("NOM"));
                utilisateur.setPrenom(result.getString("PRENOM"));
                utilisateur.setTelephone(result.getString("TELEPHONE"));
                utilisateur.setRue(result.getString("RUE"));
                utilisateur.setCodePostal(result.getString("CODEPOSTAL"));
                utilisateur.setCommune(result.getString("COMMUNE"));
                utilisateur.setDateDeNaissance(result.getString("DATEDENAISSANCE"));
                System.out.println(utilisateur.toString());
            }
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        return utilisateur;

    }

    @Override
    public Utilisateur create(Utilisateur obj)
    {
        try
        {
            PreparedStatement prepare = this.connect
                    .prepareStatement(
                    "INSERT INTO utilisateur (NOM, PRENOM, RUE, CODEPOSTAL, COMMUNE, DATEDENAISSANCE, TELEPHONE) "
                    + "VALUES( '"
                    + obj.getNom() + "','"
                    + obj.getPrenom() + "','"
                    + obj.getRue() + "','"
                    + obj.getCodePostal() + "','"
                    + obj.getCommune() + "','"
                    + obj.getDateDeNaissance() + "','"
                    + obj.getTelephone() + "');");
            //System.out.println(prepare);
            prepare.executeUpdate();

            ResultSet result = this.connect
                    .createStatement()
                    .executeQuery("SELECT max(ID) as id FROM utilisateur;");
            result.first();
            obj.setId(result.getInt("id"));
        } catch (SQLException e)
        {
            e.printStackTrace();
        }
        return obj;
    }

    @Override
    public Utilisateur update(Utilisateur obj)
    {
        try
        {
            this.connect
                    .createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE).executeUpdate(
                    "UPDATE utilisateur SET NOM ='" + obj.getNom() + "', "
                    + "PRENOM = '" + obj.getPrenom() + "',"
                    + "TELEPHONE = '" + obj.getTelephone() + "', "
                    + "RUE ='" + obj.getRue() + "', "
                    + "CODEPOSTAL ='" + obj.getCodePostal() + "', "
                    + "COMMUNE ='" + obj.getCommune() + "', "
                    + "DATEDENAISSANCE ='" + obj.getDateDeNaissance()
                    + "' WHERE ID = " + obj.getId());

        } catch (SQLException e)
        {
            e.printStackTrace();
        }

        return obj;
    }

    @Override
    public void delete(Utilisateur obj)
    {
        try
        {

            this.connect
                    .createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE).executeUpdate(
                    "DELETE FROM utilisateur WHERE ID = " + obj.getId());

        } catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    @Override
    public ArrayList<Utilisateur> findList(Utilisateur obj)
    {
        ArrayList<Utilisateur> arrUtilisateur = new ArrayList<>();
        try
        {
            String query = "";
            if ( (!obj.getNom().equals("")) && (!obj.getPrenom().equals("")) )
            {
                query = "select * from utilisateur where nom like ?  and prenom like ?;";
            }
            if ( (!obj.getNom().equals("")) && (obj.getPrenom().equals("")) )
            {
                query = "select * from utilisateur where nom like ?;";
            }
            if ( (obj.getNom().equals("")) && (!obj.getPrenom().equals("")) )
            {
                query = "select * from utilisateur where prenom like ?;";
            }

            if ( query != "" )
            {
                PreparedStatement prepare = this.connect
                        .prepareStatement(query);

                if ( (!obj.getNom().equals("")) && (!obj.getPrenom().equals("")) )
                {
                    query = "select * from utilisateur where nom like ?  and prenom like ?;";
                    prepare.setString(1, "%" + obj.getNom() + "%");
                    prepare.setString(2, "%" + obj.getPrenom() + "%");
                }
                if ( (!obj.getNom().equals("")) && (obj.getPrenom().equals("")) )
                {
                    query = "select * from utilisateur where nom like ?;";
                    prepare.setString(1, "%" + obj.getNom() + "%");
                }
                if ( (obj.getNom().equals("")) && (!obj.getPrenom().equals("")) )
                {
                    query = "select * from utilisateur where prenom like ?;";
                    prepare.setString(1, "%" + obj.getPrenom() + "%");
                }

                ResultSet result = prepare.executeQuery();


                //System.out.println(prepare);							
                while ( result.next() )
                {
                    Utilisateur utilisateurs = new Utilisateur();
                    utilisateurs.setId(result.getInt("ID"));
                    utilisateurs.setNom(result.getString("NOM"));
                    utilisateurs.setPrenom(result.getString("PRENOM"));
                    utilisateurs.setTelephone(result.getString("TELEPHONE"));
                    utilisateurs.setRue(result.getString("RUE"));
                    utilisateurs.setCommune(result.getString("COMMUNE"));
                    utilisateurs.setCodePostal(result.getString("CODEPOSTAL"));
                    utilisateurs.setDateDeNaissance(result.getString("DATEDENAISSANCE"));
                    arrUtilisateur.add(utilisateurs);
                    System.out.println(utilisateurs);
                }
            }
        } catch (SQLException e)
        {
            e.printStackTrace();
        }

        return arrUtilisateur;
    }

    @Override
    public ArrayList<Utilisateur> findList(String value2Search)
    {
        ArrayList<Utilisateur> arrClient = new ArrayList<>();


        try
        {
            String query = "SELECT * FROM  utilisateur  WHERE NOM like ? or PRENOM like ? or RUE like ? or COMMUNE like ? or CODEPOSTAL like ?;";
            PreparedStatement prepare = this.connect
                    .prepareStatement(query);
            prepare.setString(1, "%" + value2Search + "%");
            prepare.setString(2, "%" + value2Search + "%");
            prepare.setString(3, "%" + value2Search + "%");
            prepare.setString(4, "%" + value2Search + "%");
            prepare.setString(5, "%" + value2Search + "%");
            ResultSet result = prepare.executeQuery();

            while ( result.next() )
            {
                Utilisateur client = new Utilisateur();
                client.setId(result.getInt("ID"));
                client.setNom(result.getString("NOM"));
                client.setPrenom(result.getString("PRENOM"));
                client.setRue(result.getString("RUE"));
                client.setCommune(result.getString("COMMUNE"));
                client.setCodePostal(result.getString("CODEPOSTAL"));
                client.setTelephone(result.getString("TELEPHONE"));
                client.setDateDeNaissance(result.getString("DATEDENAISSANCE"));
                arrClient.add(client);
                System.out.println(client);
            }
        } catch (SQLException e)
        {
            e.printStackTrace();
        }

        return arrClient;
    }

    public void reset() throws SQLException
    {;
        this.connect
                .createStatement().execute("truncate UTILISATEUR;");
    }
}
